<?php
declare(strict_types=1);

namespace SixShop\Payment\Contracts;

use SixShop\Payment\Enum\PaymentBizEnum;

interface PaymentProviderInterface
{
    /**
     * 创建支付订单（统一下单）
     * @param array $order 订单信息（如订单号、金额、用户、商品等）
     * @param PaymentBizEnum $bizType 业务类型
     * @return PaymentResponse 下单结果（含支付跳转/二维码/表单/参数等）
     */
    public function create(array $order, PaymentBizEnum $bizType): PaymentResponse;

    /**
     * 处理支付回调（异步/同步通知）
     * @param array $request 回调请求参数
     * @return PaymentNotifyResult 处理结果（如订单号、金额、状态等）
     */
    public function notify(array $request): PaymentNotifyResult;

    /**
     * 查询支付订单状态
     */
    public function query(int $recordID): PaymentQueryResult;

    /**
     * 申请退款
     * @param int $recordID 支付记录ID
     * @param PaymentRefundRequest $param 退款参数
     * @return PaymentRefundResult
     */
    public function refund(int $recordID, PaymentRefundRequest $param): PaymentRefundResult;

    /**
     * 查询退款状态
     * @param int $refundID 退款单号ID
     * @return PaymentRefundResult
     */
    public function refundQuery(int $refundID): PaymentRefundResult;
}
